perm filename APP4[AIM,DBL] blob sn#141984 filedate 1975-01-25 generic text, type T, neo UTF8
00100	.DEVICE XGP
00200	.FONT 1 "NGR20"
00300	.FONT 2 "SIGN57"
00400	.FONT 3 "SHD40"
00500	.FONT 4 "BDI25"
00600	.FONT 5 "GRFX25"
00700	.FONT 6 "FIX25"
00800	.PAGE FRAME 69 HIGH 130 WIDE
00900	.AREA TEXT LINES 4 TO 67 IN 1 COLUMNS 130 WIDE
01000	.TITLE AREA HEADING LINES 1 TO 3 IN 1 COLUMNS 75 WIDE
01100	.TITLE AREA FOOTING LINE 69 IN 1 COLUMNS 75 WIDE
01200	.TURN ON "↓_π{"
01300	.TURN ON "\" FOR "%"
01400	.MACRO B ⊂ BEGIN VERBATIM GROUP ⊃
01500	.MACRO E ⊂ APART END ⊃
01600	.TABBREAK
01700	.COMPACT
01800	.EVERY FOOTING(Fourth Draft .... {DATE},page A4.{IF PAGE = 1 THEN 1 ELSE PAGE},CF Program excerpts\*)
01900	.EVERY HEADING(\3BEINGS\*,,\4Doug Lenat\*)
02000	.COUNT PAGE PRINTING "1"
02100	.NEXT PAGE
02200	
02300	\2APPENDIX 4. \* \3CF .... PROGRAM\*
02400	
     

00100	.SELECT 6
00200	.NOFILL
00300	
00400	
00500	
00600	This  appendix  opens  a  detailed  example  of  PUP6  in  operation.
00700	Fragments of the target concept formation program are exhibited,  and
00800	on  page  A4.7  is  a  flowchart  for a hand-coded version of CF, the
00900	target concept formation program discussed earlier.  Like PUP6,  both
01000	hand-coded  and  synthesized  versions of CF are written in INTERLISP
01100	[Teitelman, 197?] with slight  additions  (setdifference,  disk-dump,
01200	etc.)   only.        Following   each   hand-coded  piece  comes  the
01300	corresponding  BEING  version  created  by  PUP6.     Some  functions
01400	mentioned  are  system  functions used to augment the language (e.g.,
01500	MATCH.) A few functions have  been  omitted  to  aid  in  readability
01600	(e.g.,  VECTOR  and  TUPLE,  which  are  inverse  quote  forms of the
01700	function LIST). The reader should examine the META:CODE  sections  of
01800	each  BEING;  they  contain  much of the  \4executable\* code of the BEING.
01900	The  choice  of  functions,  while  not  a  random  sample,  is   not
02000	intentionally biassed. The opening, top-level functions are shown (by
02100	hand and by PUP6), and then a  very  low-level  maintenance  function
02200	(delete a feature from the NO relations of a model) is exhibited.
02300	
02400	The next phase of the extended CF example is  found  in  Appendix  5.
02500	There is a transcript of the dialogue between the user and PUP6 which
02600	produced this synthesized code. User responses are italicized to ease
02700	the  reading.     Notice  how the user may interrupt and ask PUP6 for
02800	clarification.
02900	
03000	The sixth appendix section presents a session with  this  synthesized
03100	program  itself  running. During the exectution of CF, the user stops
03200	and occasionally asks it questions; the answers are at about the same
03300	level as those one gets from PUP6 itself during the dialogue.
     

00100	.SELECT 1
00200	.NOFILL
00300	
00400	
00500	
00600	\4The top-level functions do initialization and repeatedly build up models:\*
00700	
00800	(CF
00900	  [LAMBDA NIL
01000	    (INITIALIZE:1)
01100	    (PARTITION:A:DOMAIN])
01200	
01300	(INITIALIZE:1
01400	  [LAMBDA NIL
01500	    (SETQ YES:RELATIONS (QUOTE YES:RELATIONS))
01600	    (SETQ NO:RELATIONS (QUOTE NO:RELATIONS))
01700	    (SETQ MAYBE:RELATIONS (QUOTE MAYBE:RELATIONS))
01800	    (SETQ CLASS:OBJECTS (QUOTE CLASS:OBJECTS))
01900	    (SETQ CLASS:NAMES:ORDERING (QUOTE CLASS:NAMES:ORDERING))
02000	    (SETQ IN (QUOTE IN))
02100	    (SETQ UNTIL (QUOTE UNTIL))
02200	    (SETQ CLASS:RELATIONS (QUOTE CLASS:RELATIONS))
02300	    (SETQ DO (QUOTE DO))
02400	    (SETQ FOR (QUOTE FOR))
02500	    (SETQ FROM (QUOTE FROM))
02600	    (SETQ TO (QUOTE TO))
02700	    (SETQ USING (QUOTE USING))
02800	    (SETQ LIST:OF:POSSIBLE:CLASS:NAMES NIL)
02900	    (SETQ FILE:NAME (ASK:FOR:2])
03000	
03100	\4The BEING version uses a list of initializations to do at LOAD time.  Numeric
03200	suffixes merely indicate some of the new, specialized BEINGs' names.\*
03300	
03400	  (RPAQQ GLOBAL:INITIALIZATION:LIST (
03500	          (SETQ TYPE:OF:C:F CLASSIFICATORY:CONCEPT:FORMATION)
03600		  (SETQQ HALT HALT)
03700		  (SETQQ NAME:OF:CLASS NAME:OF:CLASS)
03800		  (SETQQ SET:OF:POSSIBLE:NAMES:OF:CLASS NIL)
03900		  (SETQQ ALPHORDER ALPHORDER)
04000	  	  (SETQQ NOTHING NOTHING)
04100		  (SETQQ POSSIBLE:NAME:OF:CLASS POSSIBLE:NAME:OF:CLASS)
04200		  (SETQQ MAYBE:RELNS:30 MAYBE:RELNS:30)
04300		  (SETQQ YES:RELNS:28 YES:RELNS:28)
04400		  (SETQQ ELEMENT:RELNS:15 ELEMENT:RELNS:15)
04500		  (SETQQ NO:RELNS:29 NO:RELNS:29)
04600		  (SETQQ POSSIBLE:NAME:OF:CLASS:OBJECTS:20 POSSIBLE:NAME:OF:CLASS:OBJECTS:20)
04700		  (SETQQ ELEMENT:OBJECTS:11 ELEMENT:OBJECTS:11)
04800		  (SETQQ CLASS:MAYBE:RELNS:37 CLASS:MAYBE:RELNS:37)
04900		  (SETQQ CLASS:NO:RELNS:36 CLASS:NO:RELNS:36)
05000		  (SETQQ CLASS:YES:RELNS:35 CLASS:YES:RELNS:35)
05100		  (SETQQ CLASS:CLASSNAME:34 CLASS:CLASSNAME:34)
05200		  (SETQQ CLASS:OBJECTS:33 CLASS:OBJECTS:33)
05300		  (SETQQ ??? ???)))
05400	
05500	  (PUTPROPS CF:1 IDEN ((( ( (MEMBER LI (QUOTE ((CONCEPT FORMATION)
05600							   (CF:1)
05700							   (CONCEPT LEARNING)
05800							   (FORM CONCEPTS)
05900							   (LEARN CONCEPTS)
06000							   (LEARNS CONCEPTS)
06100							   (FORMS CONCEPTS))))))
06200				( CF:1))) 
06300	                 EXPLICIT:ARGS:CHECK T 
06400	                 WHAT ( A SPECIALIZED BEING WHICH DOES
06500				      ( LEARN HOW TO IMPOSE A CONCEPT STRUCTURING UPON A DOMAIN; LEARN HOW TO 
06600					     CHARACTERIZE, OR AT LEAST DISTINGUISH, VARIOUS CONCEPTS)) 
06700	                 HOW ( BY CHOOSING THE DESIRED TYPE OF CONCEPT FORMATION CALLED FOR, AND THEN CARRYING IT OUT) 
06800	                 WHY ( CONCEPT:LEARNING IS NECESSARY TO CONCEPT KNOWLEDGE AND CONCEPT:FORMATION IS TOO GENERAL TO 
06900				    USE AS IT IS) 
07000	                 MAIN:EFFECTS ((( ABLE PUP ( LEARN CONCEPTS))
07100					( CF:1))) 
07200	                 WHEN (((MEMBER TYPE:OF:C:F ABLE:PUP:LIST)
07300				-70
07400				( BECAUSE IF WE CAN ALREADY DO ( TYPE:OF:C:F)
07500				       THEN WE SHOULDNT TRY TO DO IT OVER AGAIN))
07600			       ((MEMBER (QUOTE (CHARACTERIZE CLASSES))
07700					PUP:WANTS:LIST)
07800				88
07900				(QUOTE (BECAUSE CONCEPT FORMATION IS A GOOD WAY TO GET A CHARACTERIZATION OF CLASSES)))
08000			       (T (COND (NEW:INFO:LIST -60)
08100					(T 40))
08200				  (QUOTE (BECAUSE NEW INFORMATION MIGHT ALTER OUR COURSE OF ACTION)))) 
08300	                 \4META:CODE\* (TEMPORARILY (PAD:2)) 
08400	                 PRE:REQUISITES (( AWARE USER ( PUP IS ABOUT TO WORK ON CONCEPT FORMATION))
08500					 ( AWARE USER ( THE TYPE OF CONCEPT FORMATION PUP IS ABOUT TO WORK ON IS
08600								    ( TYPE:OF:C:F)))) 
08700	                 POST:REQUISITES (( AWARE USER ( PUP HAS THOUGHT ABOUT THE ( TYPE:OF:C:F)
08800								     TYPE OF CONCEPT:FORMATION))) 
08900	                 DEMONS ( INFERENCE:DEMONS ATTENTION:DEMONS) 
09000	                 AFFECTS () 
09100	                 COMPLEXITY: (.8 .8 .8 .8 .1) 
09200	                 GENERALIZATIONS (CONCEPT:FORMATION ATTEND LEARN INDUCTIVE:INFERENCE) 
09300	                 SPECIALIZATIONS NIL 
09400	                 ALTERNATIVES ((GRAMMATICAL:INFERENCE PATTERN:RECOGNITION SIMULATED:EVOLUTION)) 
09500	                 BEING T 
09600	                 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1))
09700	
09800	\4Notice that both versions' CF functions just call PARTITION:A:DOMAIN\*
09900	
10000	(PARTITION:A:DOMAIN
10100	  [LAMBDA NIL
10200	    (PROG NIL
10300	      START:OF:SERIES
10400	          (INPUT:1:ELEMENT)
10500	          (COND
10600	            ((HAS:NAME)
10700	              (INPUT:2:CLASS:NAME))
10800	            (T (DETERMINE:1:CLASS:NAME)))
10900	          (COND
11000	            ((EQUAL CLASS:NAME (QUOTE HALT))
11100	              (HALT:1))
11200	            (T (PRINT (QUOTE (I NOW KNOW)))
11300	               [FOREACH (QUOTE NAME) IN LIST:OF:POSSIBLE:CLASS:NAMES
11400	                  DO (QUOTE (PROGN (PRINT NAME)
11500	                                   [COND
11600	                                     ((GETP NAME CLASS:OBJECTS)
11700	                                       (PRIN1 (QUOTE "OBJECTS "))
11800	                                       (PRINT (GETP NAME CLASS:OBJECTS]
11900	                                   [COND
12000	                                     ((GETP NAME YES:RELATIONS)
12100	                                       (PRIN1 (QUOTE "MUST HAVE "))
12200	                                       (PRINT (GETP NAME YES:RELATIONS]
12300	                                   [COND
12400	                                     ((GETP NAME NO:RELATIONS)
12500	                                       (PRIN1 (QUOTE "MUSNT HAVE "))
12600	                                       (PRINT (GETP NAME NO:RELATIONS]
12700	                                   (COND
12800	                                     ((GETP NAME MAYBE:RELATIONS)
12900	                                       (PRIN1 (QUOTE "MAY HAVE "))
13000	                                       (PRINT (GETP NAME 
13100	                                                    MAYBE:RELATIONS]
13200	               (GO START:OF:SERIES])
13300	
13400	\4The BEING version of PARTITION is quite similar.  Notice the use of comments:
13500	though written by PUP6 for its own use, they are also meaningful to the user.
13600	Below, \*ELEMENT\4 refers to a scene, and \*CLASS\4 refers to a concept model.\*
13700	
13800	  (PUTPROPS PAD:2 
13900		  	  IDEN ((( ( (MATCH ( PARTITION A DOMAIN)
14000						LI)))
14100				 ( PAD:2))
14200				(( ( (MATCH ( DIVIDE A DOMAIN UP)
14300						LI)))
14400				 ( PAD:2))) 
14500	                  IMPLICIT:ARGS (PRESULT) 
14600	                  EXPLICIT:ARGS:CHECK T 
14700	                  WHAT ( A SPECIALIZED BEING WHICH DOES
14800				       ( DIVIDE A DOMAIN INTO SUBDOMAINS; USUALLY THESE WILL BE DISJOINT, AND THEIR UNION 
14900					      WILL BE THE ENTIRE DOMAIN)) 
15000	                  HOW ( BY BUILDING UP THE PARTITION GRADUALLY, BY ADDING TO OUR KNOWLEDGE OF THE PARTITION ONE 
15100				     PAIR AT A TIME; HERE A PAIR IS <ELEMENT, CLASS:NAME>) 
15200	                  WHY ( BECAUSE PUP MUST PARTITION A DOMAIN INTO CLASSES, AND 
15300				     PARTITION:A:DOMAIN IS TOO GENERAL TO USE AS IT IS) 
15400	                  MAIN:EFFECTS ((( PARTITIONED DOMAIN)
15500					 ( PAD:2))) 
15600	                  WHEN ((PARTITIONED:DOMAIN:LIST -100 ( BECAUSE WE ALREADY HAVE PARTITIONED DOMAIN))
15700				((NULL PARTITIONED:DOMAIN:LIST)
15800				 20
15900				 ( BECAUSE PUP HAS NOT YET PARTITIONED DOMAIN, SO IT IS PLAUSIBLE TO DO IT NOW))) 
16000	                 \4META:CODE\* (PROG NIL 
16100					LABEL:1 
16200	 				  (TAKE:HOLD:OF:3 ELEMENT:4)
16300					  (COND ((HAS:NAME:5 ELEMENT:4 (COMMENT PARTITION:BY:TAKE:ELE:AND:CLASS))
16400						      (TAKE:HOLD:OF:6 NAME:OF:CLASS)
16500						      (MODIFY:STRUCTURE:7 NAME:OF:CLASS))
16600						   (T (GET:HOLD:OF:8 NAME:OF:CLASS)
16700						        (MODIFY:STRUCTURE:9 NAME:OF:CLASS)))
16800					  (COND ((IS:OF:TYPE:61 ARG1 (COMMENT BREAKAWAY))
16900	 					     (COMMENT FINALIZATION OF LOOP STARTING AT LABEL:1 MAY GO HERE))
17000						   (T (FOREACH NAME IN SET:OF:POSSIBLE:NAMES:OF:CLASS DO
17100							     (PROGN (PRINT NAME)
17200									(COND ((GETP NAME CLASS:OBJECTS:33)
17300									            (PRIN1 "OBJECTS ")
17400									            (PRINT (GETP NAME CLASS:OBJECTS:33))))
17500									(COND ((GETP NAME CLASS:YES:RELNS:35)
17600									            (PRIN1 "MUST HAVE ")
17700									            (PRINT (GETP NAME CLASS:YES:RELNS:35))))
17800									(COND ((GETP NAME CLASS:NO:RELNS:36)
17900									            (PRINT (GETP NAME CLASS:NO:RELNS:36))))
18000									(COND ((GETP NAME CLASS:MAYBE:RELNS:37)
18100									            (PRIN1 "MAY HAVE ")
18200									            (PRINT (GETP NAME CLASS:MAYBE:RELNS:37))))
18300									(TERPRI)
18400									T))
18500							(GO LABEL:1)))
18600					  (COMMENT SEE: THERE IS NO INFINITE LOOP IN THIS PROG AFTER ALL; WE ARE 
18700						   EXITING IT!)) 
18800	                  DEMONS ( FRINGE:OF:CONCIOUSNESS:DEMON) 
18900	                  COMPLEXITY: (.8 .8 .8 .8 .1) 
19000	                  GENERALIZATIONS (PARTITION:A:DOMAIN  MAP BUILD:FUNCTION) 
19100	                  SPECIALIZATIONS NIL 
19200	                  ALTERNATIVES ( DIVIDE:UP DISCRETIZE) 
19300	                  BEING T 
19400	                  EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
19500	                  AFFECTS ( ( ELEMENT:4 POSSIBLE CALLED)
19600					  ( ELEMENT:4 POSSIBLE CALLED)
19700					  ( IN POSSIBLE CALLED)))
19800	
19900	\4Here are the hand versions of INPUT:1:ELEMENT and HAS:NAME\*
20000	
20100	(INPUT:1:ELEMENT
20200	  [LAMBDA NIL
20300	    (PRINT (QUOTE (I AM READY FOR A SCENE)))
20400	    (SETQ ELEMENT (READ))
20500	    (SETQ LIST:OF:OBJECTS:OF:ELEMENT (CORRESPONDING:OBJECTS:PART))
20600	    (SETQ SET:OF:RELATIONS (CORRESPONDING:RELATIONS:PART))
20700	    (SETQ CLASS:NAME (CAR ELEMENT])
20800	
20900	(HAS:NAME
21000	  [LAMBDA NIL
21100	    (NOT (EQUAL (CAR ELEMENT)
21200	                (QUOTE ?])
21300	
21400	\4The PUP6 versions include extra BEINGS, STATIC:SCENE and ELEMENT, which
21500	have no control function;  rather,  their role  is  analogous to a data structure.
21600	PUP6 uses the name TAKE:HOLD:OF:3 instead of INPUT:1:ELEMENT.\*
21700	
21800	  (PUTPROPS STATIC:SCENE:10 IDEN ((( ( (EQUAL LI (LIST STATIC:SCENE:10))))
21900					   ( STATIC:SCENE:10))) 
22000	                            \4META:CODE\* (STRUCTURE (OBJECTS SET O)
22100							 (CLASS:NAME NAME N)
22200							 (STATIC RELATIONS S BETWEEN OBJECTS)) 
22300	                            COMPLEXITY: (.8 .8 .8 .8 .1) 
22400	                            DATA:STRUCTURE T 
22500	                            BEING T 
22600	                            WHAT ( A SPECIALIZED BEING WHICH DOES NIL)
22700	                            WHY (SCENE IS TOO GENERAL TO USE AS IT IS) 
22800	                            GENERALIZATIONS (SCENE) 
22900	  (PUTPROPS ELEMENT:4 IDEN ((( ( (EQUAL ( ELEMENT:4)
23000						    LI)))
23100				     ( ELEMENT:4))) 
23200	                      EXPLICIT:ARGS:CHECK T 
23300	                      WHAT ( A SPECIALIZED BEING WHICH DOES
23400					   ( A STRUCTURE WHICH IS A MEMBER OF A LARGER STRUCTURE)) 
23500	                      COMPLEXITY: (.8 .8 .8 .8 .1) 
23600	                      DATA:STRUCTURE (ACCESS (((SOME:PART:OF:16 X)
23700						       ACCESSES
23800						       (STATIC RELATIONS S BETWEEN OBJECTS))
23900						      ((SOME:PART:OF:14 X)
24000						       ACCESSES
24100						       (CLASS:NAME NAME N))
24200						      ((SOME:PART:OF:12 X)
24300						       ACCESSES
24400						       (OBJECTS SET O)))) 
24500	                      BEING T 
24600	                      EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
24700	                      WHY (ELEMENT IS TOO GENERAL TO USE AS IT IS) 
24800	                      \4META:CODE\* (STRUCTURE (OBJECTS SET ELEMENT:OBJECTS:11)
24900						   (CLASS:NAME NAME ELEMENT:CLASSNAME:13)
25000						   (STATIC RELATIONS ELEMENT:RELNS:15 BETWEEN OBJECTS)) 
25100	                      GENERALIZATIONS (ELEMENT) 
25200	  (PUTPROPS HAS:NAME:5 EXPLICIT:ARGS (ARG1 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
25300	                       EXPLICIT:ARGS:CHECK T 
25400	                       WHAT ( A SPECIALIZED BEING WHICH DOES ( SEE IF ( ARG1)
25500										  IS OF THE TYPE SPECIFIED. THE PARTICULAR TYPE 
25600										  IS DELINEATED BY THE SPECIAL KNOWLEDGE
25700										  ( DUMMY:ARGUMENT:2))) 
25800	                       HOW ( USE ( DUMMY:ARGUMENT:2)
25900					  DETAILS TO SEE IF IT CONTAINS ( ARG1)) 
26000	                       WHY ( WE MUST BE ABLE TO TEST AN ARG1 ( ARG1)
26100					  AND SEE IF IT BELONGS TO THE TYPE ( DUMMY:ARGUMENT:2)
26200					  AND IS:OF:TYPE IS TOO GENERAL TO USE AS IT IS) 
26300	                       \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
26400						(NOT (EQUAL (CAR ARG1)
26500							    ???))) 
26600	                       COMPLEXITY: (.8 .8 .8 .8 .1) 
26700	                       SPECIALIZATIONS NIL 
26800	                       PREDICATE T 
26900	                       BEING T 
27000	                       GENERALIZATIONS (IS:OF:TYPE) 
27100	                       AFFECTS ( ( IN POSSIBLE CALLED)
27200					       ( ELEMENT:4 POSSIBLE CALLED)))
27300	  (PUTPROPS TAKE:HOLD:OF:3 EXPLICIT:ARGS (ARG1) 
27400	                           EXPLICIT:ARGS:CHECK T 
27500	                           NLAMBDA T 
27600	                           WHAT ( A SPECIALIZED BEING WHICH DOES ( TAKE THE ARG1 ( ARG1)
27700										      IN A TRIVIAL WAY; EITHER BY ACCESSING IT 
27800										      OR BY READING IT IN)) 
27900	                           HOW ( LOOK AROUND A LITTLE; IF IT ISNT FOUND TRIVIALLY, THEN ASK THE USER TO GIVE
28000					      ( ARG1)
28100					      TO US) 
28200	                           WHY ( PUP WANTS ( ARG1)
28300					      ,AND WE DON'T HAVE TO DO ANY COMPUTING TO GET IT AND TAKE:HOLD:OF IS TOO GENERAL 
28400					      TO USE AS IT IS) 
28500	                           COMPLEXITY: (.8 .8 .8 .8 .1) 
28600	                           BEING T 
28700	                           \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
28800						    (PROGN (PRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:4))
28900							   (SET ARG1 (READ))
29000							   (SETQ ELEMENT:OBJECTS:11 (SOME:PART:OF:12 (EVAL ARG1)))
29100							   (SETQ ELEMENT:CLASSNAME:13 (SOME:PART:OF:14 (EVAL ARG1)))
29200							   (SETQ ELEMENT:RELNS:15 (SOME:PART:OF:16 (EVAL ARG1)))
29300							   T)) 
29400	                           GENERALIZATIONS (TAKE:HOLD:OF) 
29500	                           AFFECTS ( 
29600						   ( ELEMENT:4 POSSIBLE CALLED)
29700						                                   
29800						   ( ELEMENT:OBJECTS:11 POSSIBLE CALLED)
29900						   ( ELEMENT:CLASSNAME:13 POSSIBLE CALLED)
30000						   ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
30100	
30200	\4The following is a very low-level function found in the hand-coded version,
30300	which must insert a key contradictory feature into a model's set of NO relations.\*
30400	
30500	(DELETE:1:3:1
30600	  [LAMBDA NIL
30700	    (PROG (TEMPORARY:NO:RELATIONS)
30800	          (SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
30900	          (SETQ TEMPORARY:NO:RELATIONS (PULLOUT RELATION 
31000	                                             TEMPORARY:NO:RELATIONS))
31100	          (PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])
31200	
31300	\4The version PUP6 writes includes the test as well:   there must be
31400	some feature in the current NO relations set which is also present
31500	in  the  scene  (that is,  located on the list  ELEMENT:RELNS:15).\*
31600	
31700	  (PUTPROPS CONDITIONAL:DELETION:54 IDEN ((( ( ( ( ( (EQUAL (CAR LI)
31800									   (QUOTE DELETE)))))))
31900						   ( CONDITIONAL:DELETION:54 (TRANSLATE (IN (CDR LI))
32000											      T)))) 
32100	                                    EXPLICIT:ARGS (DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1) 
32200	                                    EXPLICIT:ARGS:CHECK T 
32300	                                    WHAT ( A SPECIALIZED BEING WHICH DOES
32400							 ( PERHAPS WE WILL REMOVE AN ELEMENT FROM CLASS:NO:RELNS:29 , 
32500								SOMETHING IN BOTH ELEMENT:RELNS:15
32600								AND ALREADY ON THE CLASS:NO:RELNS:29 LIST
32700	                                                        IF SUCH AN ENTITY CAN BE FOUND))
32800	                                    HOW ( WE WILL SEARCH FOR SUCH AN ELEMENT, AND USE PULLOUT)
32900	                                    WHY ( IT WOULD BE CONTRADICTORY FOR SUCH AN ELEMENT TO REMAIN ON THIS LIST 
33000						       IF IT IS ON THE LIST AND ALSO ON THE ELEMENT:RELNS:15 LIST AT THE SAME 
33100						       TIME. WE HAD TO SPECIALIZE TO THE CONDITIONAL:DELETION BEING BECAUSE
33200						       CONDITIONAL:DELETION IS TOO GENERAL TO USE AS IT IS)
33300	                                    \4META:CODE\* (PROGN (SETQ RESULT:6 (SETINTERSECTION (GETP NAME:OF:CLASS 
33400												   CLASS:NO:RELNS:36)
33500											     ELEMENT:RELNS:15))
33600							     (COND (RESULT:6 (PUT NAME:OF:CLASS CLASS:NO:RELNS:36
33700										  (PULLOUT RESULT:6 (GETP NAME:OF:CLASS 
33800													  CLASS:NO:RELNS:36))))
33900								   (T (SETQ RESULT:6 NIL)))) 
34000	                                    COMPLEXITY: (.8 .8 .8 .8 .1) 
34100	                                    GENERALIZATIONS (CONDITIONAL:DELETION  MODIFY:STRUCTURE) 
34200	                                    BEING T 
34300	                                    AFFECTS ( ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
     

00100	.NEXT PAGE
00200	.SELECT 5
00300	\4FLOW CHART OF TARGET PROGRAM (CF), INCLUDING NAMES OF MAJOR FUNCTIONS\*
00400	.B
00500	
00600	⊂αααα⊃      ⊂ααααααααααααααααααααααα⊃
00700	~ CF εααααα→λ    (INITIALIZE:1)     ~
00800	%αααα$      %ααααααααααπαααααααααααα$
00900	                       ~
01000	                       ~  enter the PARTITION:A:DOMAIN loop
01100	                       ~
01200	     ⊂α⊃    ⊂αααααααααα↓αααααααααααα⊃
01300	     ~1εααα→λ Accept the description~
01400	     %α$    ~     of a scene        ~               ⊂α⊃
01500	⊂αααααααααα→λ   (INPUT:1:ELEMENT)   ~               ~2~
01600	~           %ααααααααααπαααααααααααα$               %π$
01700	~                      ~                             ~
01800	~                      ~                             ~
01900	~           ⊂αααααααααα↓αααααααααααα⊃     ⊂αααααααααα↓αααααααααααα⊃
02000	~           ~ Does the scene have a ~ YES ~  Has the scene been   ~ YES
02100	~           ~       name?           εαααα→λ previously described? εααααα⊃
02200	~           ~      (HAS:NAME)       ~  ⊂α→λ(CHECKαFORαOLDαNAME)   ~     ↓
02300	~           %ααααααααααπαααααααααααα$  ↑  %ααααααααααπαααααααααααα$     ~
02400	~                      ~NO             ~             ~NO                ~
02500	~                      ~               ~             ~                  ~
02600	~                      ~               ~  ⊂αααααααααα↓αααααααααααα⊃     ~
02700	~                      ~               ~  ~ Insert the description~     ~
02800	~                      ~     (NOαGUESS)~  ~  of the scene in the  ~     ~
02900	~                      ~      AND SCENE~  ~      object list      ~     ~
03000	~                      ~       DEFINED ~  ~      (NEWαNAME)       ~     ~
03100	~                      ~          ⊂αααα$  %ααααααααααπαααααααααααα$     ~
03200	~                      ~          ~                  ~                  ~
03300	~                      ~          ~                  ~                  ~
03400	~(NOαGUESS) ⊂αααααααααα↓αααααααααα↑α⊃               ⊂↓⊃                 ~
03500	~AND SCENE  ~ Make a guess at what  ~   GUESS       ~1~                 ~
03600	~UNDEFINED  ~the object is, based on~ CORRECTLY     %↑$                 ~
03700	~←ααααααααααλ    previous scenes    ε→αααααααα⊃      ~                  ~
03800	~           ~ (DETERMINE:CLASSNAME) ~         ~      ~                  ~
03900	~           %ααααααααααααααααααααααα$      ⊂αα↓αααααα↑ααααααααααααα⊃    ~
04000	~                      ~MADE WRONG         ~ Correlate this scene  ~    ~
04100	~                      ~GUESS              ~   with other scenes   ~←ααα$
04200	~           ⊂αααααααααα↓αααααααααααα⊃      ~(PATCHαOLDαDESCRIPTION)~
04300	~SCENE      ~   Put in MUSTs and    ~      %ααααααααααααααααααααααα$
04400	~UNDEFINED  ~   MUSTNOTs on scene   ~   ⊂α⊃
04500	%αααααααααα←λ      differences      εαα→λ2~
04600	            ~ (TIGHTENαCONSTRAINTS) ~   %α$
04700	            %ααααααααααααααααααααααα$
04800	.E